/********************************************************************************
 *      Copyright:  (C) 2021 Simply myself<1239726156@qq.com>
 *                  All rights reserved.
 *
 *       Filename:  ini_parser.h
 *    Description:  This head file 
 *
 *        Version:  1.0.0(2021年08月08日)
 *         Author:  Simply myself <1239726156@qq.com>
 *      ChangeLog:  1, Release initial version on "2021年08月08日 17时36分31秒"
 *                 
 ********************************************************************************/

#ifndef _INI_PARSER_H_
#define _INI_PARSER_H_

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <time.h>

#include "sqlite3.h"
#include "zlog.h"

#include "iniparser.h"

#if 0
#define DEBUG
#endif

/* 声明结构体类型 */
typedef struct mosq_ctx_s
{
	char     host[64];          /* 代理的host */
    int      port;              /* 代理的port */
    int      keepalive;         /* 保活时间 */
	char     clientid[64];      /* clientid */
	char     sub_topic[64];     /* 订阅使用的Topic */
	int      sub_qos;           /* 订阅的服务质量QoS */
    char     pub_topic[64];     /* 发布使用的Topic */
    int      pub_qos;           /* 发布的服务质量QoS */
	char     pub_payload[512];  /* 发布的payload */
	char     recv_payload[512]; /* 接收到的payload */
} mosq_ctx_t;

typedef struct usr_s
{
	char    name[20];           /* username */
    char    passwd[64];         /* password */
} usr_t;

typedef struct payload_s 
{
	char    method[32];         /* 打包JSON数据包使用的method */
    char    id[10];             /* 打包JSON数据包使用的id */
    char    version[10];        /* 打包JSON数据包使用的version */
	char    params[128];        /* 打包JSON数据包使用的参数对象 */
} payload_t;

/* 标识符结构体，用于存放标识符 */
typedef struct identifier_s 	
{
	char    temp[32];			/* 温度标识符 */
	char    led[32];            /* LED灯标识符 */
} identifier_t;

/* sqlite数据库结构体 */
typedef struct database_s
{
	sqlite3 *db;                /* 数据库对象 */
	char     db_name[32];       /* 数据库文件名 */
	char     table_name[20];    /* 数据表名 */
	int      max_size;          /* 表中最多存放多少数据 */
	int      id;                /* 当前可用的id号 */
	int      max_id;            /* 当前表中最大的id号 */
	int      min_id;            /* 当前表中最小的id号 */
	int      msg_num;           /* 当前表中的数据量 */
	int      full_flag;         /* 表示表是否满 */
	float    temp;              /* 温度值 */
	char     timestamp[32];     /* 时间戳 */
} database_t;

/* zlog日志系统结构体 */
typedef struct z_log_s
{
	zlog_category_t    *zc;
	char                z_name[20];
} z_log_t;

/* mqtt 结构体 */
typedef struct mqtt_s 
{ 
	struct mosq_ctx_s   mosq_ctx;
	struct usr_s        usr;
	struct payload_s    payload_format;
	struct identifier_s identifier;
	struct database_s   DB;
	struct z_log_s      zlog;
} mqtt_t;

/* ini文件解析函数 */
int ini_parser(char *filename, struct mqtt_s *mqtt);
/* 获取ini对象里的key键的字符串类型的值，赋给dist */
int parser_str(dictionary *ini, char *key, char dist[]);
/* 获取ini对象里的key键的整型的值，赋给dist */
int parser_int(dictionary *ini, char *key, int *dist);

#endif
